/*
 * @Author: hrg
 * @Date: 2023-05-20 17:57:00
 * @LastEditTime: 2023-05-22 08:59:20
 * @FilePath: \study_go\study05\demo\main\main.go
 * @Description:封装
 */
/*
	-封装：
		-概念：
			封装就是把抽象出的字段和对字段的操作封装在一起，数据被保护在内部，
			程序的其他包只有通过被授权的操作方法，才能对字段进行操作。
		-好处：
			隐藏实现的细节
			可对数据进行验证，保证安全合理
		-golang如何实现封装:
			-建议将结构体，字段（属性）的首字母小写
			-给结构体所在的包提供一个工厂模式的函数，首字母大写（类似一个构造函数）
			-提供一个首字母大写的set方法（类似于其他语言的public）用于对属性判断并赋值
					func(var 结构体类型名)SetXxx(参数列表){
						// 加入数据验证的业务逻辑
						var.Age = 参数
					}
			- 提供一个首字母大写的Get函数（类似其他函数的public），用于获取属性值
					func(var 结构体类型名)GetXxx()返回值列表{
						return var.字段
					}
*/
package main

import (
	"fmt"
	"model/study05/demo/model"
)

func main() {
	// 同级目录下的model文件夹下含有封装好的结构体

	// 通过结构体自身的构造函数来创建实例
	people := model.NewPerson("最帅胡")

	// 通过person结构体的set方法对属性age进行赋值
	people.SetAge(23)
	// 通过person结构体的get方法对属性age进行取值，并赋值给page变量
	page := people.GetAge()

	fmt.Println(*people)
	fmt.Println(people.Name)
	fmt.Println("年龄：", page)

}
